\documentclass[a4paper,10pt]{article}
\usepackage{textcomp}
\usepackage{graphicx}
\usepackage{listings}
\usepackage{multicol}
\usepackage[utf8]{inputenc}
\usepackage[spanish]{babel}
\usepackage{pdfpages}	



\title{		\textbf{Trabajo Práctico final: Documentación técnica
}}

\author{	Muszalski, Damian, \textit{Padrón Nro. -----}                     \\
            \texttt{ damianfiuba@gmail.com }                                             \\[2.5ex]
			Tessore, Leandro, \textit{Padrón Nro. -----}                     \\
            \texttt{ leatessore10@gmail.com }                                              \\[2.5ex]
            Quiroga, S. Darío, \textit{Padrón Nro. 90101}                     \\
            \texttt{ dario.quiroga@hotmail.com }                                              \\[2.5ex]
            \normalsize{1er. Cuatrimestre de 2013}                                      \\
            \normalsize{75.42 Taller de Programacioń I  $-$ Veiga}  \\
            \normalsize{Facultad de Ingeniería, Universidad de Buenos Aires}            \\
       }


\begin{document}
\maketitle
\section{Objetivos de este documento}
\begin{enumerate}
\item Requerimientos de software: OS, bibliotecas y herramientas necesarias para compilar, desarrollar, probar y depurar el programa.
\item Descripción general: Arquitectura general del proyecto, qué módulos tiene, etcétera.
\item Módulo N
\begin{enumerate}
\item Descripción general
\item Clases: Breve descripción de cada una que incluya responsabilidad y métodos principales, como mínimo
\item Diagramas UML  
\item Descripción de archivos y protocolos
\end{enumerate}
\item Programas intermedios y de prueba
\item Código fuente
\end{enumerate}

\section{Descripción de archivos y protocolos}
\subsection{Protocolo de mensajes}
Al principio de cada mensaje, se enviará un id que representa al tipo de mensaje que se está enviando (1 byte) seguido por un unsigned int de 32 bits, que indicará la longitud total del mensaje(4 bytes). Por último el/los parámetros que componen el mensaje (si es que existe alguno).

A continuación se enumeran las ids de los posibles mensajes.

IDS (1 byte):

\begin{itemize}
\item 0:REGISTER
\item 1:LOGGING-OK
\item 2:LOGGING-ERROR
\item 3:GET-FILES-LIST
\item 4:NO-FILES
\item 5:FILES-LIST
\item 6:GET-FILE
\item 7:FILE-NOT-FOUND
\item 8:DATA
\item 9:PUT-FILE
\item 10:PUT-OK
\item 11:PUT-ERROR
\item 12:NOTIFY
\item 13:UNREGISTER
\end{itemize}






(REGISTER ID)(uint32)user pass: Lo envía el cliente al server al intentar loggearse, puede obtener un LOGGING-SUCESS o un LOGGING-ERROR como respuesta.
\newline\newline
(LOGGING-OK ID)(uint32): Lo envía el servidor al cliente en caso de un loggeo exitoso.
\newline\newline
(LOGGING-ERROR ID)(uint32): Lo envía el servidor al cliente en caso de un loggeo erróneo.
\newline\newline
(GET-FILES-LIST ID)(uint32): Lo envía el cliente al servidor para pedir la lista actual de archivos cargados, con sus respectivos hash.
\newline\newline
(NO-FILES ID)(uint 32): Lo envía el servidor al cliente, si no hay archivos en el directorio
\newline\newline
(FILES-LIST ID)(uint32)archivo1.txt\#hash1 archivo2.zip\#hash2 ...: Lo envía el servidor al cliente, como respuesta al pedido de archivos en el directorio. Los hashes son strings en hexa.
\newline\newline
(GET-FILE ID)(uint32)archivo1.txt: Lo envía el cliente al servidor, para pedir que se le envíe un archivo.
\newline\newline
(FILE-NOT-FOUND ID)(uint32)archivo1.txt: Enviado por el servidor, en caso de que el archivo pedido no exista.
(DATA ID)(uint32)XXXXXXXXXXXXXXXXXXXXXXXX(Archivo en hexa): Lo envía el servidor al cliente, es la transferencia del archivo.
\newline\newline
(PUT-FILE ID)(uint32)archivo1.txt\#hash XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX(archivo en hexa): Lo manda el cliente al servidor, al detectar un cambio de archivo en el polling. El hash está en hexa, así que no va a haber confusión.
\newline\newline
(PUT-OK ID)(uint32): Lo manda el servidor al cliente, si se pudo guardar el archivo enviado.
\newline\newline
(PUT-ERROR ID)(uint32): Lo manda el servidor al cliente, si no se pudo almacenar el archivo (sin espacio en disco).
\newline\newline
(NOTIFY ID)(uint32)*archivo1.txt: Lo envía el servidor a CADA cliente conectado, al detectar que un archivo cambió o se subió uno nuevo. El asterisco será un byte, que indique si se eliminó el archivo, se modificó o es uno nuevo. (B ó A ó M).
\newline\newline
(UNREGISTER ID)(uint32): Lo envía el cliente al servidor, al cerrar sesión.
\newline\newline
Ejemplos:
Cliente con datos user, pass se quiere loggear - Mensaje enviado: 0(1 byte)11(4 bytes) user pass
\newline\newline
Servidor acepta el loggeo - Mensaje enviado: 1(1 byte)1(4 bytes)
\newline\newline
Servidor envía lista de archivos y hashes: 4(1 byte)37(4 bytes)archivo1.txt\#FFFF archivo2.zip\#ABCDF 
 



	




\end{document}
